package com.itheima.thread.pool.demo03;

import javax.print.attribute.standard.RequestingUserName;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 如何直接通过ThreadPoolExecutor创建我们的线程池
 */
public class ThreadPoolExecutorDemo01 {

    public static void main(String[] args) {

        // 1. 创建ThreadPoolExecutor对象
        /**
         * ThreadPoolExecutor的构造方法：
         *
         * public ThreadPoolExecutor(int corePoolSize,
         *                               int maximumPoolSize,
         *                               long keepAliveTime,
         *                               TimeUnit unit,
         *                               BlockingQueue<Runnable> workQueue,
         *                               ThreadFactory threadFactory,
         *                               RejectedExecutionHandler handler)
         *
         *  corePoolSize：   核心线程的最大值，不能小于0
         *  maximumPoolSize：最大线程数，不能小于等于0，maximumPoolSize >= corePoolSize
         *  keepAliveTime：  空闲线程最大存活时间,不能小于0
         *  TimeUnit：       时间单位
         *  workQueue：      任务队列，不能为null
         *  threadFactory：  线程工厂 ， 生产线程
         *  handler：        任务的拒绝策略,不能为null
         *
         */
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1 , 3 , 60 , TimeUnit.SECONDS ,
                new ArrayBlockingQueue<Runnable>(3) , Executors.defaultThreadFactory() , new ThreadPoolExecutor.AbortPolicy()) ;

        // 2. 提交任务
        threadPoolExecutor.submit( () -> System.out.println(Thread.currentThread().getName() + "----任务执行了....")) ;

        // 3. 关闭线程池
        threadPoolExecutor.shutdown();

    }

}
